<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 1. 创建一个根标签  -->
    <div id="root"></div>

    <!-- 2. 引入react库文件和babel 
    注意: 先引入react后引入react-dom. 因为react-dom依赖react
    -->
    <script crossorigin src="./js/react.development.js"></script>
    <script crossorigin src="./js//react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>

    <!-- 3. 根据数据动态创建元素,最后渲染到页面上 -->
    <!-- type="text/babel" 作用: 让babel编译这个script里面的代码. 会将jsx编译成 React.createElement -->
    <script type="text/babel">
      const person = {
        name: '老陶',
        age: 58,
        description: 'lsp',
      }

      //  jsx中插值表达式两个问题:
      // 1. 插值表达式写在哪里
      // 1.1 标签的子节点 为了渲染这个数据
      // 1.2 标签的属性的值 为了控制属性的值
      // 2. 插值表达式里面写什么
      // 插值表达式中可以写任何的js表达式
      // 什么是js表达式: 一段代码运行之后又结果就是js表达式
      // 表达式:
      // 字面量(1,false,'123',{},[])
      // 变量,常量
      // 函数声明
      // function fn() {} 是表达式
      // 所有运算都是表达式

      // 语句(不是表达式):
      // const fn = function () {} //声明语句 不是表达式
      // if,for,switch,while... 是语句不是表达式
      // const a = 1 这也是声明语句,不是表达式

      // 注意:
      // 1. 布尔值是表达式,但是不要渲染.因为没有意义,而且react处理的时候,也不会渲染
      // 2. 插值表达式中可以写普通对象,但是不要去渲染.会报错. 插值表达式写普通对象主要用于给标签添加行内样式
      // 3. 当渲染一个数组的时候,会把数组中每一个元素当做一个节点渲染到当前标签中
      const div = (
        // jsx开始
        <div>
          {/*<div>{false}</div>*/}
          {/*<button disabled={false}>按钮</button>*/}
          {/*<h1>123, {{ name: 'zs' }}</h1>*/}
          {/*<h1 style={{ color: 'red', fontSize: 80 }}>123</h1>*/}
          {/*<div>{['a', 'b', 'c']}</div>*/}
          {/*<div>{'abc'}</div>*/}
          {/*<ul>{[<li>1</li>, <li>2</li>]}</ul>*/}
        </div>
        // jsx结束
      )
      ReactDOM.render(div, document.getElementById('root'))
    </script>
  </body>
</html>
